package com.jhy.suixianglu.daima20230206;

import java.util.Stack;

/**
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
 *
 * 有效字符串需满足：
 *
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 注意空字符串可被认为是有效字符串。
 */
public class IsValid {
    public boolean isValid(String s) {
        // 先判断字符串的长度
        if(s.length()%2 != 0){
            return false;
        }
        if(" ".equals(s)){
            return true;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c == '(' || c=='{' || c=='['){
                stack.push(c);
            }else {
                if(stack.isEmpty()){
                    return false;
                }
                Character pop = stack.pop();
                if(c==')' && pop != '('){
                    return false;
                }
                if(c == '}' && pop != '{'){
                    return false;
                }
                if(c == ']' && pop != '['){
                    return false;
                }
            }
        }
        // 只要上面的false条件一个都不成立的话 那边下面的stack一定为空所以就为true。
        return stack.isEmpty();
    }
}
